package algo3.algocity.modelo.menu;

import java.util.ArrayList;

import algo3.algocity.modelo.catastrofes.Terremoto;
import algo3.algocity.modelo.conectores.LineaDeTension;
import algo3.algocity.modelo.conectores.TuberiaDeAgua;
import algo3.algocity.modelo.excepciones.NoSePuedeEdificarEnEsaZonaException;
import algo3.algocity.modelo.interfaces.Construccion;
import algo3.algocity.modelo.interfaces.MegaConstruccion;
import algo3.algocity.modelo.interfaces.MiniConstruccion;
import algo3.algocity.modelo.mapa.Coordenada;
import algo3.algocity.vista.PartidaObserver;
import algo3.algocity.vista.Vista;

public class Jugador {

	private int dineroEnPesos;
	private String nombre;
	private Partida partida;
	private ArrayList<PartidaObserver> observadores;
	
	public Jugador() {
		
		this.dineroEnPesos = 5000;
		this.nombre = " ";
		this.partida = new Partida();
		observadores = new ArrayList<PartidaObserver>();
	}
	
	public Partida obtenerPartida(){
		
		return this.partida;
	}
	
	public String obtenerNombre() {
		
		return this.nombre;
	}
	
	public int dinero() {
		
		return this.dineroEnPesos;
	}

	public void cobrarPorCiudadano() {
		
		this.dineroEnPesos += this.partida.pagarAlJugadorPorCiudadano();
	}
	

	public void construirMegaConstruccion(MegaConstruccion construccion, Coordenada coordenada) throws NoSePuedeEdificarEnEsaZonaException {
		
		this.dineroEnPesos = this.dineroEnPesos - construccion.costo();
		this.partida.construir(construccion,coordenada);
		
	}

	public void agregarObservador(Vista vista) {
		
		
	}
	
	public void notificarObservadores() {
		
		for(PartidaObserver observador : observadores) {
			observador.recibirNotificacion();
		}
	}

	public void notificarObservadoresPorTerremoto(Terremoto terremoto) {
	
		for(PartidaObserver observador : observadores) {
		//	observador.recibirNotificacionDeTerremoto(terremoto);
		}
	}

	public void reiniciarJuego() {
		//mapa.reiniciar();
		//this.dineroDisponible = DINERO_INICIAL;
		this.notificarObservadores();
		}
		
	public void agregarObservador(PartidaObserver observador) {
		this.observadores.add(observador);
	}
	
	
	/*public void construirTuberiaDeAgua(TuberiaDeAgua tuberiaDeAgua,Coordenada coordenada) throws NoSePuedeEdificarEnEsaZonaException{
		
		this.dineroEnPesos -= tuberiaDeAgua.costo();
		this.partida.construirTuberiaDeAgua(tuberiaDeAgua,coordenada);
	}
	
	public void construirLineaDeTension(LineaDeTension lineaDeTension,Coordenada coordenada) throws NoSePuedeEdificarEnEsaZonaException{
		
		this.dineroEnPesos -= lineaDeTension.costo();
		this.partida.construirLineaDeTension(lineaDeTension,coordenada);
	}*/


}
